home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / 68343ffp.arc / IEFSIN.SA < prev    next >
Text File  |  1989-08-30  |  5KB  |  109 lines

  1.          TTL       IEEE FORMAT EQUIVALENT (IEFSIN/IEFCOS/IEFTAN)
  2. ***************************************
  3. * (C) COPYRIGHT 1981 BY MOTOROLA INC. *
  4. ***************************************
  5.  
  6. *************************************************
  7. *            IEFSIN IEFCOS IEFTAN               *
  8. * IEEE FORMAT EQUIVALENT  SINE/COSINE/TANGENT   *
  9. *                                               *
  10. *  INPUT:   D7 - IEEE FORMAT ARGUMENT (RADIANS) *
  11. *                                               *
  12. *  OUTPUT:  D7 - IEEE FORMAT FUNCTION RESULT    *
  13. *                                               *
  14. *     ALL OTHER REGISTERS TOTALLY TRANSPARENT   *
  15. *                                               *
  16. *        MAXIMUM STACK USED:   54 BYTES         *
  17. *                                               *
  18. *  CONDITION CODES:                             *
  19. *        Z - SET IF RESULT IN D7 IS ZERO        *
  20. *        N - SET IF RESULT IN D7 IS NEGATIVE    *
  21. *        C - UNDEFINED                          *
  22. *        V - SET IF RESULT IS NAN (NOT-A-NUMBER)*
  23. *            (INPUT MAGNITUDE TOO LARGE OR NAN) *
  24. *        X - UNDEFINED                          *
  25. *                                               *
  26. *  FUNCTIONS:                                   *
  27. *             IEFSIN   -  SINE RESULT           *
  28. *             IEFCOS   -  COSINE RESULT         *
  29. *             IEFTAN   -  TANGENT RESULT        *
  30. *                                               *
  31. *  NOTES:                                       *
  32. *    1) INPUT VALUES ARE IN RADIANS.            *
  33. *    2) INPUT ARGUMENTS LARGER THAN TWO PI      *
  34. *       SUFFER REDUCED PRECISION.  THE LARGER   *
  35. *       THE ARGUMENT, THE SMALLER THE PRECISION.*
  36. *       EXCESSIVELY LARGE ARGUMENTS WHICH HAVE  *
  37. *       LESS THAN 5 BITS OF PRECISION ARE       *
  38. *       RETURNED AS A NAN WITH THE "V" BIT SET. *
  39. *    3) THE SIGN OF TANGENTS WITH INFINITE      *
  40. *       VALUE IS UNDEFINED, HOWEVER WE RETURN   *
  41. *       A POSITIVE INFINITY.                    *
  42. *    4) SPOT CHECKS SHOW RELATIVE ERRORS BOUNDED*
  43. *       BY 4 X 10**-7 BUT FOR ARGUMENTS CLOSE TO*
  44. *       PI/2 INTERVALS WHERE 10**-5 IS SEEN.    *
  45. *                                               *
  46. *************************************************
  47.          PAGE
  48. IEFSIN   IDNT  1,1 IEEE FORMAT EQUIVALENT SINE/COSINE/TANGENT
  49.  
  50.          OPT       PCS
  51.  
  52.          SECTION   9
  53.  
  54.          XDEF      IEFSIN,IEFCOS,IEFTAN     ENTRY POINTS
  55.  
  56.          XREF      9:FFPSIN,9:FFPCOS,9:FFPTAN  FFP TRANSCENDENTALS
  57.          XREF      9:IEFSOP          SINGLE OPERAND FRONT-ENDER
  58.          XREF      9:IEFTIEEE        BACK-END CONVERT BACK TO IEEE FORMAT
  59.          XREF      9:IEFRTNAN        BACK-END RETURN IEEE NAN ROUTINE
  60.          XREF      FFPCPYRT            COPYRIGHT STUB
  61.  
  62. VBIT     EQU       $0002     CONDITION CODE REGISTER "V" BIT MASK
  63. FFPSIGN  EQU.B     $80       SIGN IN FAST FLOATING POINT VALUE
  64.  
  65. ***********************
  66. * TANGENT ENTRY POINT *
  67. ***********************
  68. IEFTAN   BSR       IEFSOP    PARSE THE OPERAND
  69.          BRA.S     IEFTNRM   +0 BRANCH NOT INFINITY OR NAN
  70.          BRA       IEFRTNAN  +2 RETURN NAN FOR INFINITY
  71.  
  72. * PERFORM TANGENT FUNCTION WITH NORMALIZED NUMBER
  73. IEFTNRM  BSR       FFPTAN    FIND TANGENT
  74.          BRA.S     IEFCMN    ENTER COMMON EXIT CODE
  75.  
  76. **********************
  77. * COSINE ENTRY POINT *
  78. **********************
  79. IEFCOS   BSR       IEFSOP    PARSE THE OPERAND
  80.          BRA.S     IEFCNRM   +0 BRANCH NOT INFINITY OR NAN
  81.          BRA       IEFRTNAN  +2 RETURN NAN FOR INFINITY
  82.  
  83. * PERFORM COSINE FUNCTION WITH NORMALIZED NUMBER
  84. IEFCNRM  BSR       FFPCOS    FIND COSINE
  85.          BRA.S     IEFCMN    ENTER COMMON EXIT CODE
  86.  
  87. ********************
  88. * SINE ENTRY POINT *
  89. ********************
  90. IEFSIN   BSR       IEFSOP    PARSE THE OPERAND
  91.          BRA.S     IEFSNRM   +0 BRANCH NOT INFINITY OR NAN
  92.          BRA       IEFRTNAN  +2 RETURN NAN FOR INFINITY
  93.  
  94. * PERFORM SINE FUNCTION WITH NORMALIZED NUMBER
  95. IEFSNRM  BSR       FFPSIN    FIND SINE
  96. IEFCMN   BVC       IEFTIEEE  RETURN IF HAD ENOUGH PRECISION
  97. * OVERFLOW CAN MEAN TRUE INFINITY RESULT OR NOT ENOUGH PRECISION
  98. * WE CAN TEST FOR NOT ENOUGH PRECISION BY CHECKING FOR LARGEST POSSIBLE VALUE
  99.          MOVE.L    D7,D5     COPY OVER FFP FORMAT RESULT
  100.          OR.B      #FFPSIGN,D5 SET SIGN BIT TO A ONE
  101.          SUB.L     #1,D5     TEST FOR ALL ONE BITS
  102.          BNE       IEFRTNAN  NO, NOT ENOUGH PRECISION, RETURN A NAN
  103.          TST.B     D7        RESET CCR AS IT WAS
  104.          OR.B      #VBIT,CCR AND SHOW OVERFLOW OCCURED
  105.          BRA       IEFTIEEE  RESTORE WITH INFINITY OF PROPER SIGN
  106.  
  107.          END
  108.  
  109.